package Test;

public class Test06 {
//    public int lastStoneWeight(int[] stones)
// {
//         // 1. 创建⼀个⼤根堆
//         PriorityQueue<Integer> heap = new PriorityQueue<>((a, b) -> b - a);
//         // 2. 把所有的⽯头放进堆⾥⾯
//         for(int x : stones)
//             {
//             heap.offer(x);
//             }
//         // 3. 模拟
//         while(heap.size() > 1)
//             {
//             int a = heap.poll();
//             int b = heap.poll();
//             if(a > b)
//                 {
//                 heap.offer(a - b);
//                 }
//             }
//
//         return heap.isEmpty() ? 0 : heap.peek();
//         }
//    public List<Integer> largestValues(TreeNode root)
// {
//         List<Integer> ret = new ArrayList<>();
//         if(root == null) return ret;
//
//         Queue<TreeNode> q = new LinkedList<>();
//         q.add(root);
//         while(!q.isEmpty())
//             {
//             int sz = q.size();
//             int tmp = Integer.MIN_VALUE;
//             for(int i = 0; i < sz; i++)
//                 {
//                 TreeNode t = q.poll();
//                 tmp = Math.max(tmp, t.val);
//                 if(t.left != null) q.add(t.left);
//                 if(t.right != null) q.add(t.right);
//                 }
//             ret.add(tmp);
//             }
//
//         return ret;
//         }
//    public int widthOfBinaryTree(TreeNode root)
// {
//         List<Pair<TreeNode, Integer>> q = new ArrayList<>(); // ⽤数组模拟队列
//         q.add(new Pair<TreeNode, Integer>(root, 1));
//         int ret = 0; // 记录最终结果
//
//         while(!q.isEmpty())
//             {
//             // 先更新⼀下这⼀层的宽度
//             Pair<TreeNode, Integer> t1 = q.get(0);
//             Pair<TreeNode, Integer> t2 = q.get(q.size() - 1);
//             ret = Math.max(ret, t2.getValue() - t1.getValue() + 1);
//             // 让下⼀层进队
//             List<Pair<TreeNode, Integer>> tmp = new ArrayList<>();
//             for(Pair<TreeNode, Integer> t : q)
//                 {
//                 TreeNode node = t.getKey();
//                 int index = t.getValue();
//                 if(node.left != null)
//                     {
//                     tmp.add(new Pair<TreeNode, Integer>(node.left, index * 2));
//                     }
//                 if(node.right != null)
//                     {
//                     tmp.add(new Pair<TreeNode, Integer>(node.right, index * 2
//                            + 1));
//                     }
//                 }
//             q = tmp;
//             }
//         return ret;
//         }
}
